﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace Szabalyrendszer
{
    public class TamadasSzamolo //: ITamadasSzamolo
    {
        private ISfeSzamolasiStrategia sfeSzamolo;

        public ISfeSzamolasiStrategia SfeSzamolo
        {
            get { return sfeSzamolo ?? (sfeSzamolo = new PancelSerthetetlenStrategia()); }
            set { sfeSzamolo = value; }
        }

        public SebzesSzamolo SebzesSzamolo { get; set; }

        public ElszenvedettSebzes TamadasKiszamolasa(int celpontVe, int celpontFp, Fegyverzet celpontVertezet, int celpontSfe, Tamadas tamadas)
        {
            if (tamadas.Te > celpontVe)
            {
                var elszenvedettSebzes = new ElszenvedettSebzes
                {
                    Siker = true,
                    TalatHelye = TalalatHelyeSzamolo(tamadas.TalalatHelye)
                };
                if (tamadas.Te > celpontVe + tamadas.TulutesKuszob)
                {
                    SfeSzamolo.SfeSzamolas(celpontSfe, tamadas, true, celpontVertezet);
                    elszenvedettSebzes.Tulutes = true;
                    elszenvedettSebzes.Sebzes = SebzesSzamolo.SebzesSzamolas(true, tamadas.Sebzesek, 0, false, 0, celpontFp);
                }
                else
                {
                    SfeSzamolo.SfeSzamolas(celpontSfe, tamadas, false, celpontVertezet);
                    elszenvedettSebzes.Tulutes = false;
                    elszenvedettSebzes.Sebzes = SebzesSzamolo.SebzesSzamolas(false, tamadas.Sebzesek, 0, false, 0, celpontFp);
                }
                return elszenvedettSebzes;
            }
            else
            {
                return ElszenvedettSebzes.NullSebzes;
            }
        }

        TalalatHelye TalalatHelyeSzamolo(int talalatHelye)
        {
            switch (talalatHelye)
            {
                case 1: return TalalatHelye.JobbLab;
                case 2: return TalalatHelye.BalLab;
                case 3: return TalalatHelye.NemFegyverforgatoKar;
                case 4:
                case 5:
                case 6: return TalalatHelye.FegyverforgatoKar;
                case 7:
                case 8:
                case 9: return TalalatHelye.Torzs;
                case 0: return TalalatHelye.Fej;
                default: throw new ArgumentOutOfRangeException();
            }
        }
    }
}
